home *** CD-ROM | disk | FTP | other *** search
/ Magnum One / Magnum One (Mid-American Digital) (Disc Manufacturing).iso / d11 / display.arc / ACT.C next >
Encoding:
C/C++ Source or Header  |  1990-12-30  |  1.8 KB  |  84 lines

  1. /* act.c - action by palette rotation.
  2.    (c)1989 by Stephen P. Clark */
  3.  
  4. #include <stdio.h>
  5. #include <graph.h>
  6. #include <conio.h>
  7. #define EGARGB(r,g,b) (0x3F3F3FL & ((long)(b) << 20 | (g) <<12 | (r << 4)))
  8.  
  9. main(argc,argv)
  10. int argc;
  11. char *argv[];
  12. {
  13.     FILE *fp,*fopen();
  14.     char line[200],*lptr;
  15.     short i,j,c1,c2,k,red,green,blue;
  16.     long int pal[16],temp_palet;
  17.  
  18.     if(argc != 2)
  19.     {
  20.         printf("Usage: act <filename>\n\n");
  21.         printf("Produces action by palette rotation.\n");
  22.         printf("By Stephen P. Clark 1989.\n");
  23.         exit(0);
  24.     }
  25.     if((fp=fopen(argv[argc-1],"rb"))==NULL)
  26.     {
  27.         printf("Can't open %s\n",argv[argc-1]);
  28.         exit(0);
  29.     }
  30.     fread(line,2,1,fp); /* read file ID information */
  31.     if(line[0] != 0 || line[1] != 0)
  32.     {
  33.         printf("Not a valid file\n");
  34.         exit(0);
  35.     }
  36.     if(_setvideomode(_MRES16COLOR) == 0)
  37.     {
  38.         printf("This is not an EGA or VGA display.\n");
  39.         exit(0);
  40.     }
  41.  
  42.     fread(line,16,1,fp); /* read in palette information */
  43.     for(i=0; i < 16; )
  44.     {
  45.         red   = ((line[i] & 0x04) >> 2) + ((line[i] & 0x20) >> 4);
  46.         green = ((line[i] & 0x02) >> 1) + ((line[i] & 0x10) >> 3);
  47.         blue  = (line[i] & 0x01) + ((line[i] & 0x08) >> 2);
  48.         pal[i] = EGARGB(red,green,blue);
  49.         i++;
  50.     }
  51.     _remapallpalette(&(pal[0]));
  52.     for(i=0;i<8;i++) /* skip first 8 lines */
  53.         fread(line,160,1,fp);
  54.     for(i=0; i<192; i++)
  55.     {
  56.         fread(line,160,1,fp);
  57.         for(k=0,j=0; k<160; k++)
  58.         {
  59.             c1 = (line[k] & 0xF0) >> 4;
  60.             _setcolor(c1);
  61.             _setpixel(j,i);
  62.             j++;
  63.             c2 = (line[k] & 0x0F);
  64.             _setcolor(c2);
  65.             _setpixel(j,i);
  66.             j++;
  67.         }
  68.     }
  69.     fclose(fp);
  70.     do{
  71.         temp_palet = pal[15];
  72.         for(i=15; i>8; )
  73.         {
  74.             pal[i] = pal[i-1];
  75.             _remappalette(i,pal[i]);
  76.             i--;
  77.         }
  78.         pal[8] = temp_palet;
  79.         _remappalette(i,pal[8]);
  80.     } while(kbhit() == 0);
  81.     _setvideomode(_DEFAULTMODE);
  82. }
  83.  
  84.